package com.dtx.abstractfactory.factory;

/**
 * 前面我们学习了抽象零件和抽象产品的代码,现在终于可以来看看抽象工厂。
 * getFactory方法方法可以根据指定的类名生成具体工厂的实例。例如,可以像下面这样,将参数className指定为具体工厂
 * 的类名所对应的字符串。
 * "listfactory.ListFactory"
 */
public abstract class Factory {

    public static Factory getFactory(String className){

        Factory factory = null;

        try {
            factory = (Factory) Class.forName(className).newInstance();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
            System.out.println(" 没有找到 " + className + " 类 。");
        }

        return factory;
    }

    public abstract Link createLink(String caption,String url);

    public abstract Tray createTray(String caption);

    public abstract Page createPage(String title,String author);
}
